package com.zpself.module.算法练习.计算;

/**
 * @author By ZengPeng
 * @Description 对于一个 正整数，如果它和除了它自身以外的所有 正因子 之和相等，我们称它为 「完美数」。
 *              给定一个 整数 n， 如果是完美数，返回 true，否则返回 false
 * @date in  2021/2/5 19:06
 * @Modified By
 */
public class 力扣_507_完美数 {

    public static void main(String[] args) {

        System.out.println(checkPerfectNumber(28));
        System.out.println(checkPerfectNumber(6));
        System.out.println(checkPerfectNumber(496));
        System.out.println(checkPerfectNumber(8128));
        System.out.println(checkPerfectNumber(99999999));
    }

    public static boolean checkPerfectNumber(int num) {
        if (num==1)return false;

        int sum=1;
        int k =(int)Math.sqrt(num);//这里是关键点1： 找到平方根，前面的都是弟弟+ 相除的商(哥哥)
        while (k>1){
            if(num%k==0)sum+=k +num/k;//这里是关键点2： 把两个数都加上
            k--;
        }
        return sum==num;
    }
}
